import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

//给定一个非负整数numRows，生成杨辉三角的前numRows行
public class YangHui {
    //这类题都是找规律
    //1.第i行上有i+1列
    //2.每一行的第一列和最后一列（第i+1列）的元素都是1
    //3.第i行的第j列的元素，是 第i-1行第j-1列的元素+第i-1行第j列的元素
    public static List<List<Integer>> generate(int numRows){
        List<List<Integer>> result=new ArrayList<>();//要返回的二维数组
        for(int i=0;i<numRows;i++){
            List<Integer> row=new ArrayList<>();
            for (int j = 0; j < i+1; j++) {//每行（也就是这里的每个row）有i+1个元素（i+1个列）
                if(j==0||j==i){//是第0列或第i列则元素为1
                    //row.set(j,1);其实也就是：row.add(1);
                    row.add(1);
                }else{//一般的列, 值是 result[i-1][j-1] + result[i-1][j]  result代码中是不能用下标访问操作符的
                    //row.add(result[i-1][j-1] + result[i-1][j]);
                    List<Integer> prevRow=result.get(i-1);//得到前面一整行
                    int current=prevRow.get(j)+prevRow.get(j-1);
                    row.add(current);
                }
            }
            //走到这里，已经构造好了一整行，所以把一行放进result里
            result.add(row);
        }
        return result;
    }

    public static void main(String[] args) throws Exception {
        Scanner scan=new Scanner(System.in);
        int numRows=scan.nextInt();//这里输入小数会自动抛异常：InputMismatchException
        if(numRows<0){
            throw new Exception("输入的是负数，不符合要求！");
        }
        List<List<Integer>> list=generate(numRows);
        System.out.println(list);
    }

}
/*
在Java中，如果要求输入正整数，而用户输入了负数，这本身并不会由Java系统自动抛出特定的标准异常。不过，通常可以通过编程逻辑来检测这种情况并手动抛出异常。

以下是几种常见处理方式：

使用 IllegalArgumentException：IllegalArgumentException 用于表明传递给方法的参数不合法。当检测到输入的负数不符合正整数要求时，可以抛出这个异常。
java

复制
import java.util.Scanner;

public class PositiveIntegerInput {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个正整数：");
        int number = scanner.nextInt();

        if (number <= 0) {
            throw new IllegalArgumentException("输入必须是正整数");
        }
        System.out.println("输入的正整数是：" + number);
        scanner.close();
    }
}
在上述代码中，从控制台读取输入后，检查输入的数字是否小于等于0。如果是，则抛出 IllegalArgumentException 异常，并附带相应的错误信息。

自定义异常：也可以创建自定义异常类来表示这种特定情况。这样做可以使代码的语义更加清晰，更易于维护和扩展。
java

复制
import java.util.Scanner;

// 自定义异常类
class NegativeNumberException extends Exception {
    public NegativeNumberException(String message) {
        super(message);
    }
}

public class PositiveIntegerCustomException {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个正整数：");
        int number = scanner.nextInt();

        try {
            if (number <= 0) {
                throw new NegativeNumberException("输入必须是正整数");
            }
            System.out.println("输入的正整数是：" + number);
        } catch (NegativeNumberException e) {
            System.out.println("捕获到自定义异常：" + e.getMessage());
        }
        scanner.close();
    }
}
在这段代码中，定义了一个 NegativeNumberException 自定义异常类。在检测到输入为负数时，抛出这个自定义异常，并在 catch 块中进行相应处理。


 */